from flask import Blueprint, request, Flask, jsonify
import requests
import hashlib  # 用于计算 MD5 签名

class MapService:
    # 腾讯地图 API 的 Key 和 Secret Key
    API_KEY = 'SEJBZ-ZGWKI-AMOGX-UMREJ-PV4H6-I2FV2'
    SECRET_KEY = 'R11E92767oORiHOgNl7368dUVS8q7Hkg'

    @staticmethod
    def calculate_sig(params, request_path):
        """
        计算签名 (sig)
        :param params: 请求参数（已排序）
        :param request_path: 请求路径
        :return: 计算后的签名 (sig)
        """
        # 拼接请求路径、参数和 Secret Key
        sig_string = request_path + "?" + params + MapService.SECRET_KEY
        
        # 计算 MD5 签名（小写）
        return hashlib.md5(sig_string.encode('utf-8')).hexdigest()

    @staticmethod
    def register_user(latitude, longitude):
        """
        注册用户并调用腾讯地图 API
        :param latitude: 纬度
        :param longitude: 经度
        :return: API 响应数据
        """
        # 请求路径
        request_path = "/ws/geocoder/v1"

        # 请求参数
        params = {
            "location": f"{latitude},{longitude}",
            "key": MapService.API_KEY,
        }

        # 对参数按名称升序排序
        sorted_params = '&'.join([f"{key}={params[key]}" for key in sorted(params.keys())])

        # 计算签名
        sig = MapService.calculate_sig(sorted_params, request_path)

        # 生成最终的请求 URL
        final_url = f"https://apis.map.qq.com{request_path}?{sorted_params}&sig={sig}"

        # 请求头，声明发送的数据类型为 JSON
        headers = {
            "Content-Type": "application/json",
        }

        try:
            # 发送 GET 请求
            response = requests.get(final_url, headers=headers)
            res_data = response.json()
            print("响应数据：", res_data)
            return res_data
        except requests.exceptions.RequestException as e:
            # 捕获 requests 库抛出的异常（如网络错误）
            print("请求发生错误：", e)
            return False